def fun1(a, b, c):
    print('a=', a)
    print('b=', b)
    print('c=', c)
    return


fun1(10, 20, 30)  # 函数调用中的参数传递，位置传参
lst = [11, 22, 33]
# fun1(lst)  #   fun1() missing 2   直接实参写列表会提示缺少两个实参
fun1(*lst)  # 加*号说明后，可以把列表中的三个元素对应传给形参
fun1(a = 100, b = 300, c = 200)  # 关键字传参
dic = {'a': 100, 'c': 300, 'b': 200}
fun1(**dic)  # 加**双星号后，可以对字典里的内容进行关键字传参

'''关键字形参'''


def fun2(a, b, *, c, d):  # * 是关键字形参；表示之后的形参必须采用关键字传参方法
    print('a=', a)
    print('b=', b)
    print('c=', c)
    print('d=', d)
    return


# fun2(10,20,30,40)  #   报错！关键字形参*存在，之后的c,d必须使用关键字实参传递，不能使用位置传参
fun2(10, 20, d = 40, c = 30)
fun2(d = 44, c = 33, b = 22, a = 11)

'''函数定义时，形参的顺序问题'''


def fun3(a, b, *, c, d):
    pass
def fun4(a, b, *args, **args2):
    pass

'''def fun5(a,b=10,*,*args):   #报错！
    pass'''
def fun6(*args, a, b):
    print(args,a,b)

fun6(10,20,a = 30,b = 40)
